package com.snailhd.framework.common.exception;


import com.snailhd.framework.common.entity.SubCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.Map;

/**
 * @author snailhd
 */

@Setter
@Getter
@NoArgsConstructor
public class BaseException extends RuntimeException{

    private String subCode;
    private Map<String,Object> subArgs;

    public BaseException(String subCode) {
        this.subCode = subCode;
    }


    public BaseException(SubCode subCode) {
        this.subCode = subCode.getCode();
    }

    public BaseException(SubCode subCode,Throwable cause) {
        super(cause);
        this.subCode = subCode.getCode();
    }

    public BaseException(String subCode, String subMsg) {
        super(subMsg);
        this.subCode = subCode;
    }
    public BaseException(String subCode, String subMsg,Map<String,Object> subArgs) {
        super(subMsg);
        this.subCode = subCode;
        this.subArgs =subArgs;
    }

    public BaseException(SubCode subCode, String subMsg) {
        super(subMsg);
        this.subCode = subCode.getCode();
    }
    public BaseException(SubCode subCode, String subMsg,Map<String,Object> subArgs) {
        super(subMsg);
        this.subCode = subCode.getCode();
        this.subArgs =subArgs;
    }

    public BaseException(String subCode, String subMsg,Map<String,Object> subArgs, Throwable cause) {
        super(subMsg, cause);
        this.subCode = subCode;
        this.subArgs = subArgs;
    }
    public BaseException(String subCode, String subMsg, Throwable cause) {
        super(subMsg, cause);
        this.subCode = subCode;
    }


    public BaseException(SubCode subCode, String subMsg, Throwable cause) {
        super(subMsg, cause);
        this.subCode = subCode.getCode();
    }

    public BaseException(SubCode subCode, String subMsg,Map<String,Object> subArgs, Throwable cause) {
        super(subMsg, cause);
        this.subCode = subCode.getCode();
        this.subArgs = subArgs;
    }

}
